package cn.iocoder.yudao.module.im.service;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.im.dal.dataobject.ImMessageDO;

import java.util.List;

/**
 * 消息服务接口
 *
 * @author 芋道源码
 */
public interface ImMessageService {

    /**
     * 发送消息
     *
     * @param messageDO 消息对象
     * @return 消息ID
     */
    Long sendMessage(ImMessageDO messageDO);

    /**
     * 撤回消息
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否撤回成功
     */
    boolean recallMessage(Long messageId, Long userId);

    /**
     * 删除消息
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteMessage(Long messageId, Long userId);

    /**
     * 查询消息详情
     *
     * @param messageId 消息ID
     * @return 消息详情
     */
    ImMessageDO getMessage(Long messageId);

    /**
     * 查询会话消息列表
     *
     * @param conversationId 会话ID
     * @param offset 偏移量
     * @param limit 查询数量
     * @return 消息列表
     */
    List<ImMessageDO> getMessageListByConversationId(Long conversationId, Integer offset, Integer limit);

    /**
     * 获取会话最新消息
     *
     * @param conversationId 会话ID
     * @return 最新消息
     */
    ImMessageDO getLatestMessageByConversationId(Long conversationId);

    /**
     * 统计会话消息数量
     *
     * @param conversationId 会话ID
     * @return 消息数量
     */
    Long countMessageByConversationId(Long conversationId);

}